//
//  IMAdjustModels.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/1/27.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * Adjust事件配置模型
 */
@interface IMAdjustEventConfig : NSObject

/// 事件ID
@property (nonatomic, copy) NSString *eventId;

/// 事件参数（可选）
@property (nonatomic, strong, nullable) NSDictionary<NSString *, NSString *> *parameters;

/// 收入金额（可选）
@property (nonatomic, strong, nullable) NSNumber *revenue;

/// 货币代码（可选）
@property (nonatomic, copy, nullable) NSString *currency;

/**
 * 创建基础事件配置
 * @param eventId 事件ID
 * @return 事件配置实例
 */
+ (instancetype)configWithEventId:(NSString *)eventId;

/**
 * 创建带参数的事件配置
 * @param eventId 事件ID
 * @param parameters 事件参数
 * @return 事件配置实例
 */
+ (instancetype)configWithEventId:(NSString *)eventId parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters;

/**
 * 创建收入事件配置
 * @param eventId 事件ID
 * @param revenue 收入金额
 * @param currency 货币代码
 * @return 事件配置实例
 */
+ (instancetype)configWithEventId:(NSString *)eventId revenue:(NSNumber *)revenue currency:(NSString *)currency;

/**
 * 验证配置是否有效
 * @return YES表示有效，NO表示无效
 */
- (BOOL)isValid;

@end

/**
 * Adjust事件上报结果
 */
@interface IMAdjustResult : NSObject

/// 是否成功
@property (nonatomic, assign, readonly) BOOL success;

/// 错误码（失败时）
@property (nonatomic, assign, readonly) NSInteger errorCode;

/// 错误信息（失败时）
@property (nonatomic, copy, readonly, nullable) NSString *errorMessage;

/// 事件ID
@property (nonatomic, copy, readonly, nullable) NSString *eventId;

/**
 * 创建成功结果
 * @param eventId 事件ID
 * @return 结果实例
 */
+ (instancetype)successWithEventId:(NSString *)eventId;

/**
 * 创建失败结果
 * @param errorCode 错误码
 * @param errorMessage 错误信息
 * @return 结果实例
 */
+ (instancetype)failureWithCode:(NSInteger)errorCode message:(NSString *)errorMessage;

@end

/**
 * Adjust事件上报回调
 * @param result 上报结果
 */
typedef void(^IMAdjustCompletionBlock)(IMAdjustResult *result);

NS_ASSUME_NONNULL_END